
构造函数”，就是用来生成实例对象的函数(创建对象的函数)。

### 构造函数与普通函数的区别
- 调用方式不同，构造函数通过new 调用。
- this不同，构造函数this指向自身。
- new 之后的函数，类型变成了Object  
```js 
function fn(){}

let fnIns = new fn;

console.log(typeof fnIns);

```
### 判断是构造函数还是普通函数，

- 显示判断：构造函数是用 new 生成的。 比如 new Vue();
- 函数内判断：

```js
function fn() {
  console.log(new.target);
}
fn(); // undefined
new fn(); // ƒ fn() { console.log(new.target);} // 可以判断出是通过new 调用
```

### 使用 new 操作符会执行如下操作

1. 在内存中创建一个空JavaScript对象。
2. 新对象内部的[[Prototype]]被赋值给构造函数的 prototype 属性。
3. 构造函数内部的 this 指向这个对象。
4. 执行函数内部的代码。
5. 如果构造函数返回非空对象，则返回该对象；否则，返回刚创建的新对象。
